<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta name="keywords" content="hexo,个人博客,blog" />
  <meta name="description" content="赚钱，裸辞开店！！" />
  <meta http-equiv="x-dns-prefetch-control" content="on">
  <link rel="dns-prefetch" href="https://busuanzi.ibruce.info">
  <link rel="dns-prefetch" href="https://at.alicdn.com">
  
  <link rel="dns-prefetch" href="https://widget.daovoice.io">
  <link rel="dns-prefetch" href="https://widget-static-cdn.daovoice.io">
  <link rel="dns-prefetch" href="https://im.daovoice.io">
  
  
  <link rel="dns-prefetch" href="https://hm.baidu.com/">
  
  
  <link rel="stylesheet" type="text/css" href="/./style/main.css">
	<link rel="shortcut icon" href="/favicon.ico" title="Favicon">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
	<title>git常用命令</title>
  
  <script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src="https://hm.baidu.com/hm.js?awwssw1snsnsnn1ndndnndnd99j";var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm,s);})();
  </script>
  
  
    <script>(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/123456.js","daovoice");daovoice('init',{app_id: "123456"});daovoice('update');
  </script>
  
<meta name="generator" content="Hexo 6.3.0"></head>
<body>
  <canvas id="pattern-placeholder" height="230"></canvas>
<div class="navbar-header">
  <a class="blog-title" href="/">Kyist</a>
  <a class="face-img" href="/">
    <img src="/img/zz.png">
  </a>
</div>
<main>
  <div class="article-title">
    
  
  <h1 class="title">
    git常用命令
  </h1>
  


    <ul class="article-info">
      <li>
        发布
        <time datetime="2023-02-10T16:54:01.000Z" itemprop="datePublished">2023-02-11</time>
      </li>
      <li>
        
    更新 <time datetime="2023-02-11T09:21:11.919Z" itemprop="dateUpdated">2023-02-11</time>

      </li>
      <li id="busuanzi_container_page_pv">
        阅读 <span id="busuanzi_value_page_pv"></span>
      </li>
    </ul>
  </div>
  <div class="container">
    <div class="article">
      <div class="content">
        
        <h1 id="Git常用命令"><a href="#Git常用命令" class="headerlink" title="Git常用命令"></a>Git常用命令</h1><p>一般来说，日常使用只要记住下图6个命令，就可以了。但是熟练使用，恐怕要要记住60~100个命令。</p>
<p><img src="http://img.saodiyang.com/FlWMWzIX9WE7PW-7eyeq8uaEJ_3p.png" alt="git常用命令"></p>
<p>git常用命令</p>
<p>下面整理的 Git 命令清单。几个专业名词的译名如下。</p>
<pre><code>Workspace：工作区
Index / Stage：暂存区
Repository：仓库区（本地仓库）
Remote：远程仓库xml复制代码
</code></pre>
<h2 id="新建版本仓库"><a href="#新建版本仓库" class="headerlink" title="新建版本仓库"></a>新建版本仓库</h2><pre><code># 在当前目录新建一个Git代码库
$ git init

# 新建一个目录，将其初始化为Git代码库
$ git init [project-name]

# 下载一个项目和它的整个代码历史, -o 给远程仓库起名:faker,默认origin
$ git clone [-o faker] [url]bash复制代码
</code></pre>
<h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><p>Git的设置文件为<code>.gitconfig</code>，它可以在用户主目录下（全局配置），也可以在项目目录下（项目配置）。</p>
<pre><code># 显示当前的Git配置
$ git config --list

# 编辑Git配置文件
$ git config -e [--global]

# 设置提交代码时的用户信息
$ git config [--global] user.name &quot;[name]&quot;
$ git config [--global] user.email &quot;[email address]&quot;

# 设置大小写敏感（windows不区分大小写的解决办法）
$ git config core.ignorecase  falsebash复制代码
</code></pre>
<h2 id="增加-x2F-删除文件"><a href="#增加-x2F-删除文件" class="headerlink" title="增加&#x2F;删除文件"></a>增加&#x2F;删除文件</h2><pre><code># 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区，包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

# 添加每个变化前，都会要求确认
# 对于同一个文件的多处变化，可以实现分次提交
$ git add -p

# 删除工作区文件，并且将这次删除放入暂存区
$ git rm [file1] [file2] ...

# 停止追踪指定文件，但该文件会保留在工作区
$ git rm --cached [file]

# 改名文件，并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]bash复制代码
</code></pre>
<h2 id="代码提交"><a href="#代码提交" class="headerlink" title="代码提交"></a>代码提交</h2><pre><code># 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化，直接到仓库区
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit，替代上一次提交
# 如果代码没有任何新变化，则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit，并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...bash复制代码
</code></pre>
<h2 id="分支"><a href="#分支" class="headerlink" title="分支"></a>分支</h2><pre><code># 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 列出所有本地分支，并展示没有分支最后一次提交的信息
$ git branch -v

# 列出所有本地分支，并展示没有分支最后一次提交的信息和远程分支的追踪情况
$ git branch -vv

# 列出所有已经合并到当前分支的分支
$ git branch --merged

# 列出所有还没有合并到当前分支的分支
$ git branch --no-merged

# 新建一个分支，但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支，并切换到该分支
$ git checkout -b [branch]

# 新建一个与远程分支同名的分支，并切换到该分支
$ git checkout --track [branch-name]

# 新建一个分支，指向指定commit
$ git branch [branch] [commit]

# 新建一个分支，与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支，并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系，在现有分支与指定的远程分支之间
$ git branch --set-upstream-to=[remote-branch]
$ git branch --set-upstream [branch] [remote-branch] # 已被弃用

# 合并指定分支到当前分支
$ git merge [branch]

# 中断此次合并（你可能不想处理冲突）
$ git merge --abort

# 选择一个commit，合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

#新增远程分支 远程分支需先在本地创建,再进行推送
$ git push origin [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]bash复制代码
</code></pre>
<h2 id="标签"><a href="#标签" class="headerlink" title="标签"></a>标签</h2><pre><code># 列出所有tag
$ git tag

# 新建一个tag在当前commit
$ git tag [tag]

# 新建一个tag在指定commit
$ git tag [tag] [commit]

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]

# 提交指定tag
$ git push [remote] [tag]

# 提交所有tag
$ git push [remote] --tags

# 新建一个分支，指向某个tag
$ git checkout -b [branch] [tag]bash复制代码
</code></pre>
<h2 id="查看信息-x2F-搜索"><a href="#查看信息-x2F-搜索" class="headerlink" title="查看信息&#x2F;搜索"></a>查看信息&#x2F;搜索</h2><pre><code># 显示有变更的文件
$ git status [-sb] #s:short,给一个短格式的展示，b:展示当前分支

# 显示当前分支的版本历史
$ git log

# 显示commit历史，以及每次commit发生变更的文件
$ git log --stat

# 搜索提交历史，根据关键词
$ git log -S [keyword]

# 显示某个commit之后的所有变动，每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动，其&quot;提交说明&quot;必须符合搜索条件
$ git log [tag] HEAD --grep feature

# 显示某个文件的版本历史，包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示过去5次提交
$ git log -5 --pretty --oneline

# 图形化显示所有分支
$ git log --oneline --graph --all

# 显示在分支2而不在分支1中的提交
$ git log [分支1]..[分支2]
$ git log ^[分支1] [分支2]
$ git log [分支2] --not [分支1]

# 显示两个分支不同时包含的提交
$ git log [分支1]...[分支2]

# 显示所有提交过的用户，按提交次数排序
$ git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区和上一个commit的差异
$ git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD

# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
$ git diff --shortstat &quot;@&#123;0 day ago&#125;&quot;

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时，某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几次提交
$ git reflog

# 搜索你工作目录的文件，输出匹配行号
$ git grep -n [关键字]

# 搜索你工作目录的文件，输出每个文件包含多少个匹配
$ git grep --count [关键字]

# 优化阅读
$ git grep --break --heading [关键字]

# 查询iCheck这个字符串那次提交的
$ git log -SiCheck --oneline

# 查询git_deflate_bound函数每一次的变更
$ git log -L :git_deflate_bound:zlib.cbash复制代码
</code></pre>
<h2 id="远程同步"><a href="#远程同步" class="headerlink" title="远程同步"></a>远程同步</h2><pre><code># 下载远程仓库的所有变动 [shortname] 为远程仓库的shortname, 如origin,为空时:默认origin
$ git fetch [shortname]

# 显示所有远程仓库
$ git remote -v

#显式地获得远程引用的完整列表 [shortname] 为远程仓库的shortname, 如origin,为空时:默认origin
$ git ls-remote [shortname]

# 显示某个远程仓库的信息 [remote] 为远程仓库的shortname, 如origin
$ git remote show [shortname]

# 增加一个新的远程仓库，并命名
$ git remote add [shortname] [url]

# 重命名一个远程仓库（shortname）
$ git remote rename [旧仓库名] [新仓库名]

# 删除一个远程链接
$ git remote rm [shortname] [url]
$ git remote remove [shortname] [url]

# 修改远程仓库地址
$ git remote set-url [shortname] [url]

# 取回远程仓库的变化，并与本地分支合并
$ git pull [remote] [branch]

# 上传本地当前分支到远程仓库
git push [remote]

# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

# 推送所有分支到远程仓库
$ git push [remote] --all

# 强行推送当前分支到远程仓库，即使有冲突
$ git push [remote] --forcebash复制代码
</code></pre>
<h2 id="撤销"><a href="#撤销" class="headerlink" title="撤销"></a>撤销</h2><pre><code># 恢复暂存区的指定文件到工作区
$ git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区
$ git checkout .

#只会保留源码（工作区），回退commit(本地仓库)与index（暂存区）到某个版本
$ git reset &lt;commit_id&gt;   #默认为 --mixed模式
$ git reset --mixed &lt;commit_id&gt;

#保留源码（工作区）和index（暂存区），只回退commit（本地仓库）到某个版本
$ git reset --soft &lt;commit_id&gt;

#源码（工作区）、commit（本地仓库）与index（暂存区）都回退到某个版本
$ git reset --hard &lt;commit_id&gt;

# 恢复到最后一次提交的状态
$ git reset --hard HEAD

# 新建一个commit，用来撤销指定commit
# 后者的所有变化都将被前者抵消，并且应用到当前分支
$ git revert [commit]

# 将工作区和暂存区的代码全都存储起来了
$ git stash [save]

# 只保存工作区，不存储暂存区
$ git stash --keep-index

# 存储工作区、暂存区和未跟踪文件
$ git stash -u
$ git stash --include-untracked

# 不存储所有改动的东西，但会交互式的提示那些改动想要被储藏、哪些改动需要保存在工作目录中
$ git stash --patch

# 不指定名字，Git认为指定最近的储藏，将存储的代码（工作区和暂存区）都应用到工作区
$ git stash apply [stash@&#123;2&#125;]

# 存储的工作区和暂存区的代码应用到工作区和暂存区
$ git stash apply [stash@&#123;2&#125;] --index

# 将存储的代码（工作区和暂存区）都应用到工作区，并从栈上扔掉他
$ git stash pop

# 删除stash@&#123;2&#125;的存储
$ git stash drop [stash@&#123;2&#125;]

# 获取储藏的列表
$ git stash list

# 移除工作目录中所有未跟踪的文件及口口那个的子目录，不会移除.gitiignore忽略的文件
$ git clean -f -d
</code></pre>

      </div>
        <div class="support-author">
          <p>感谢您的阅读。 🙏
          <a href="" target="_blank">关于转载请看这里</a>
            <!--<a class="btn-pay"  href="#pay-modal">¥ 打赏支持</a>-->
          </p>
        </div>
        <!--
            <div class="like ">
              <div class="like-button">
                <a id="like-note" href="">
                  <i class="icon-heart"></i>喜欢
                </a>
              </div>
              <span id="likes-count">256</span>
            </div>
        -->
        <div class="otherLink">
          <div class="previous">
          </div>
          <div class="next">
          </div>
        </div>
        <div class="comments" id="comments">
          

        </div>
      </div>
    </div>
   </div>
</main>
<div class="footer">
  <div class="info">
    <p>
    <a target="_blank" rel="noopener" href="https://hexo.io"> Hexo </a> 强力驱动 |
      <a target="_blank" rel="noopener" href="https://github.com/Youthink/hexo-themes-yearn"> Yearn </a>
      主题
    </p>
    <p>&copy;2013-2018 某某的博客 京ICP备xxxxxx号</p>
  </div>
</div>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

<script>//console
  var consoleConfig = ''.split(',');
  var canConsole = ;
  var consoleInfo = (function(consoleConfig) {
  if (!canConsole || !consoleConfig || consoleConfig.length < 1) {
    return;
  }
  var consoleColor = '#6190e8';
  var _console;
  var backgroundTextStyle = 'padding: 1px 5px;color: #fff;background: ' + consoleColor + ';'
  var textStyle = 'color: ' + consoleColor + ';';

  consoleConfig.map(o => {
    var num = (o.match(/%c/g) || []).length;
    if(/^http(s)?:\/\//.test(o)) {
      console.log('%c     ', 'background: url(' + o + ') no-repeat left center;font-size: 180px;');
      return;
    }
    if (num > 0) {
      var logArguments = [];
      for (var i = 0; i < num; i++) {
        if (i % 2 === 0) {
          logArguments.push(backgroundTextStyle);
        } else {
          logArguments.push(textStyle);
        }
      }
      (_console = console).log.apply(_console, ['%c' + o, textStyle].concat(logArguments));
      return;
    }
    console.log('%c' + o, textStyle);
  });
}(consoleConfig));</script><script type="text/javascript" src="/./js/main.js"></script>

  <script src="//at.alicdn.com/t/font_159214_mvtxvg9me9.js"></script>
</body>
</html>
